﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 委托08_Lambda表达式
{
    class Program
    {
        static void Main(string[] args)
        {
            // 匿名方法
            Func<int, int, int> f2 = delegate (int a, int b) { return a + b; };

            // Lambda表达式用来代替匿名方法，所以表达式中也定义了一个方法
            // Lambda表达式中的参数是可以不声明类型的
            Func<int, int, int> f3 = (a, b) => a + b;
            //{
            //    return a + b;
            //};
            // 当函数体的语句只有一句时，可以不加大括号和return
            // 当只有一个参数的时候，可以不加小括号
            // 当有多条语句、有多个参数的时候都不能省略，必须要写全
            Func<int, int> f4 = arg => 1;
            int i = f4(123);
            Console.WriteLine(i);

            // 只要有委托参数类型的地方就能使用匿名方法，
            // 只要能够使用匿名方法的地方就一定能使用lambda表达式
            // Lambda表达式是用来代替匿名方法的

            Func<int, int> f5 = arg => arg + 1;
            Console.WriteLine(f5(7));
        }
    }
}
